package main

// range 会复制目标数据，不会修改原数组。
// 改用切片或指针

import "fmt"

func main() {
	var a = [5]int{11, 22, 33, 44, 55}
	var r [5]int

	fmt.Println("original a =", a)

	// 真正参与循环的是a的副本，而不是真正的a
	for i, v := range a {
		if i == 0 {
			a[1] = 101
			a[2] = 202
		}

		r[i] = v
	}

	fmt.Println("after for range loop, r =", r) // [11 22 33 44 55]
	fmt.Println("after for range loop, a =", a) // [11 101 202 44 55]

	var m = [5]int{11, 22, 33, 44, 55}
	var n [5]int

	// 解决办法是：数组切片化
	for i, v := range m[:] {
		if i == 0 {
			m[1] = 101
			m[2] = 202
		}
		n[i] = v
	}

	fmt.Println("after for range loop, n =", n) // [11 101 202 44 55]
	fmt.Println("after for range loop, m =", m) // [11 101 202 44 55]
}
